package com.zxy.zxyrpc.loadBalancer;

import com.zxy.zxyrpc.model.ServiceMetaInfo;

import java.util.List;
import java.util.Map;

/**
 * 负载均衡接口（策略模式）
 *      加权设计
 *          1.取模法：加weight属性，对列表进行取模（简单，但不稳定）
 *          2.双列表法，分开存储高/低服务器列表，在取模选取（计算量大）
 * @author zxy
 * @since 2025/5/27
 **/
public interface LoadBalancer {
    /**
     * 负载均衡方法（选择服务列表中的一个方法执行）
     *
     * @param reqParams           请求参数
     * @param serviceMetaInfoList 服务列表
     * @return 选择的服务
     */
    ServiceMetaInfo select(Map<String, Object> reqParams, List<ServiceMetaInfo> serviceMetaInfoList);
}
